{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 实战 音乐推荐\n",
    "\n",
    "## 简介\n",
    "由于在线音乐流媒体服务的发展，我们在早上通勤时可以听到各种不同风格的歌曲，如披头士乐队、Vivaldi和嘎嘎小姐的音乐。通过挖掘海量的历史音乐欣赏记录，流媒体服务可以提供为用户提供个性化音乐推荐。\n",
    "\n",
    "KKBOX是亚洲领先的音乐流媒体服务，拥有世界上最全面的亚洲流行音乐库，拥有超过3000万条曲目。本项目，我们需要预测KKBOX用户在触发了第一个听歌曲事件后，在一个时间窗口内的重复聆听歌曲的可能性。如果用户在第一次听了歌曲后之后的一个月内重复聆听了该歌曲，则其目标被标记为1，否则标记为0。\n",
    "\n",
    "课程中，我们学过很多机器学习算法。项目要求大家结合课程中学到的内容，实现一个音乐推荐系统。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 评价标准\n",
    "\n",
    "### 一整套可以运行的推荐系统\n",
    "包含代码、详细文档，以及可能的中间数据。文档要求可操作，能够按照文档的描述搭建系统并运行。文档不全者酌情扣分。系统最终结果提交Kaggle竞赛主页（https://www.kaggle.com/c/kkbox-music-recommendation-challenge ）\n",
    "给出系统在测试集上的性能（ROC曲线下的面积，AUC）。\n",
    "\n",
    "文档要求：\n",
    "- 对系统的各个组成部分的构造和自己的理解以及相互之间的关系的描述。\n",
    "- 训练过程中踩到的一些坑和自己的心得。 \n",
    "- 对系统输出结果的简单分析。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据集\n",
    "\n",
    "项目提供KKBOX用户——歌曲重复播放记录，以及用户和歌曲的元数据。训练数据由2017年2月服务到期的用户构成，target标签代表用户在2017年3月是否续订了业务。测试集中的数据由2017年3月内将到期的用户构成，需要预测用户是否在到期后的一个月内即2017年4月预定、流失的概率。\n",
    "\n",
    "以下是文件及字段说明：\n",
    "\n",
    "### 1. train.csv: 训练数据，共7,377,418条记录\n",
    "\n",
    "msno: 用户id，加密String\n",
    "\n",
    "song_id: song id，歌曲id\n",
    "\n",
    "source_system_tab: 触发事件的类型/tab，用于表示app的功能类型\n",
    "\n",
    "source_screen_name: 用户看到的布局的名字（name of the layout）\n",
    "\n",
    "source_type: 用户在app上播放音乐的入口的类型\n",
    "\n",
    "target: 标签。1表示用户在第一次听音乐后会在一个月内继续订阅，0表示没有订阅。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>explore</td>\n",
       "      <td>Explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>explore</td>\n",
       "      <td>Explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                           msno  \\\n",
       "0  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=           explore   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=        my library   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=        my library   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=        my library   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=           explore   \n",
       "\n",
       "    source_screen_name      source_type  target  \n",
       "0              Explore  online-playlist       1  \n",
       "1  Local playlist more   local-playlist       1  \n",
       "2  Local playlist more   local-playlist       1  \n",
       "3  Local playlist more   local-playlist       1  \n",
       "4              Explore  online-playlist       1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = 'data/'\n",
    "train = pd.read_csv(path+'train.csv')\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 7377418 entries, 0 to 7377417\n",
      "Data columns (total 6 columns):\n",
      "msno                  object\n",
      "song_id               object\n",
      "source_system_tab     object\n",
      "source_screen_name    object\n",
      "source_type           object\n",
      "target                int64\n",
      "dtypes: int64(1), object(5)\n",
      "memory usage: 337.7+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Target 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train.target);\n",
    "plt.xlabel('target');\n",
    "plt.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看不同source_system_tab对结果的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py:1633: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x148dd780>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nrdPdXpGqen5VXVJVf5vZlU933tcTpunfqKqLp/v4m9Oyf1dVfzbdxw/N7RPPmfr3w1X1C9Oyl9Tc\n2clp//qlafq5U19fUFW/Oi07omZn4n4vyftz8+/P32ctU/cfVNW2qrpo532b2h07Pbf/PsmPzC2f\nfyfpXlX11qlf3lpV37zmd2gPTPf9w9P0feqmY/gFVXVUkt9Icu9p2Uundrt77F859dtbquqOS7a1\nqaouq5m7VtUNVfWI6bZ3VtW37OzLab88LslLp23fe1rNE6ca/7mqHr7gfrnF/amq+0/Hhgum59HX\nTc+3LUleN9V6x5rOplfVqUm+J8nLq+qldfMzqsseh6rq95fufzU7Ht8tydum41iq6vKaXjN28fy9\n1cdkX7Obfr/x3YmaZYrL17nUVVcrfK1bZn97dnaxb+xuH6iqB0373T9M++bujgNrq7tvsz9JviPJ\nm5Pcbpr/vSQ/keSnk7wpyXOTvGK67YjMruL4sGn+1Ul+eZp+e2Y7yt2SfCLJ5sy+kvDvkvzw1KaT\n/Og0fbsk706yeZp/UmZfK7iefXFEkuuT3Dezf7TeN93HSnJ8kj+f2v33JL8wTX9/kj9ZZl0nJvnd\nafqFS/rpldP0I5J8eK7N+5LccZq/U5I7TNNHZfY1i0nyqCTXJTlyrub3T9MHJPl/Sb5hvferqZ4n\n7Lyv0/xddvWYz9ec5NeT/Pw0fWaSv0yyaZp/SZLfnmv7dXP71g9N01uTvGC97/9u+uWBSS6cHuM7\nJ7k0yS9P9/WEJF+f5JLc9A1Ed51+v2Fuv9s09efOdR2c5JAkFyV5wPRz3tw2L07yzdP+esa0Tx8w\n9e0jpv3ohiTfvd79s4d9ebO6k3z9XP+8Pcn9ktwhyRXT86iSvDHJX07tTsxNz9M3J/nJafqnMj3f\n97WfJJ+fu+87jx+/k+Sp0/RBSe44f/u0fHeP/fVJ7j+1e2OSpy2z3f+b5D5JfjCzayw8P8ntk3xs\nmb48M8kJc3/79iT/Y5r+gSR/u+B94hb3J8kFSR45LTst03Fkqm3Lklq3LDP9qLn9ZlfHoVvsf9P8\n5UkOm2t/eWaXmN7V83dFj8m+9LObfp/vw8OSXL5Mf96472zEn+zZa93S/W1X+8Yu94EkH07y0Gn6\nN7Kb48Ba98Vt/Qz192b2pD6/qj44zf/77n5VkkOTPDOzF/udrujud03Tr83sP/h5D0ry9u7e0d3X\nJ3ldZgftJPlakj+Zpr8tyXcm+Ztpuy/I7EqS6+1j3X1hd9+Q2cHtrT3bOy/MbAdPZiH7J6bpn0ry\nh3u4jf+TJN39jiR3rpvGS53d3V+cpm+X5JVVdWGSP87N3z79x+7+2LSOy5N8uqoekNkL5ge6+9N7\nWM+iXJjksTU7W/rwzM567uox/87pTNeFSZ6a2Qv3Tn/c3V+bph+b5PSdN3T3Z6bJr2QWEJLZPyZH\nLOD+rJaHJ/mz7v5Cd/9bbnmxp39L8qUkr6qqH0nyhWn5Y5L8fpJ099e6+9rMnn9/1t3Xdffnk/xp\nkod39weSfGPNxtl+V5LPdPcnMttHvj/JBzI7o/vtmQXNJPl4d79nQfd5kebr/tGqen9m9+8+mT1v\nvj2z5/VHp+fya3exnockef00/b9zy2PbvuwfkvxKVf3XJPeaO47M291j/7Hu/uA0vavnzzszO5Y/\nIsmLM+ufB2UWrlfiT29l/atp6f25d2b/mJ43LXtNbnpd2hu7Og4tt//tzrLP313chyMG6l0rG7Hm\n1bAnr3V74hb9OeWFQ7v73dPy18+1X8lxYKH263GZK1BJXtPdz7vZwtlb7jt3gEOSfG6aXvql3Uvn\nazfb+tJcMKokF3X3Q/a85IX68tz0DXPzN2TaV7r7iqr6l6p6TJIHZxYA98Su+vC6uWW/mORfknxX\nZmeTvjR323y7JHlVZv/hH55Z2N8ndPc/V9UDMzsj9eIkf5NdP+ZnZvZOxoeq6sTMzl7sNH9/K7fs\nvyT56hSWktk/bvv683qXX37fswtCHZPZP7dPTnJSZmF6Obt7vr0pszPehyc5a679i7v7FTdbSdUR\nueV+tVFclyRVdWRm//w/qLs/U1VnZnZ2OtlNf+/GhrlAQXe/vmZD6R6f5Nyq+ukkly1ptrvHfv64\n97XMznAv9c7MTrDcLcmpmb17+agk71hhmTu3sRbPz6X3Z7U/5HWL49Ct7H+7W8+urOQx2dcsV/P1\nuWlo7a31x4a0h691e2K5/tzlPrPccaC7/26whj1yWz9D/dYkJ1TVNyZJVX19Vd0rs7e0XpfZgfOV\nc+2/uap27iRPSfL3S9b33iSPnMYAbZranJdbuiTJ5p3rqqrbVdV9lmm3r3pVZme63jj3T8JKPSlJ\nqup7klw7nWlc6i5JPjWdKf/xzN5C3JU/S3JsZmeLzt3DWhamZp9k/kJ3vzbJb2b2z8euHvNDk3yq\n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\nAAAY8P8DLbPwqLhJ0skAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,8))\n",
    "sns.barplot(data=train[['source_system_tab',\n",
    "                       'target']],\n",
    "           x=\"source_system_tab\",y=\"target\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看不同source_screen_name对结果的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py:1633: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x14af3c88>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n9QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,8))\n",
    "sns.barplot(data=train[['source_screen_name',\n",
    "                       'target']],\n",
    "           x=\"source_screen_name\",y=\"target\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 查看不同source_type对结果的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\stats\\stats.py:1633: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
      "  return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x14b7e9b0>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ncBq3aXMxbOc+eLv2CWPa2uHM09dz4Tw1v7qq/nxHpzmm3c0ZZTteu+jvt2URvEe11p7VWrtoqetY\niAXUenySbQ7eS6m19qB5Rlm04L0QrbWrWmvHLXT8qqokP5Jk3jdQVa3Ywdp+obV2bZK7LGR6M6a9\nKsmDWmv3a629aoGv2a4fU/fzeXxGtsXluO2StNZOaq19fI5Rnpjk8Ops0+dHa21da+0vd6xCpi1g\n37bN+5UdtSP7tEnr92PPS7I5SI/UO2q09q3GX4hZ2twh27kP3hl9cp6aj0jygaGK2RaL+X7baYN3\nVT2/qr7a/z2vPwp0cVX9Xf9f00er6o5jXrf5yG1/hPXPq+q8qvpCVf1o//jKqnp/VZ3d/z14lhou\nr6q/qqov9X/3HjPOb/dtnNe3eaeq2reqvlFVt+vH2a9v63Zz1PrWfl6vrqr/rKpvJnlgktOq6tyq\n+uOquqCfzl/ONu15lukhVfW1qnpbdUdKTx/3mqp6Q1Wt75fzy/vHHllVHxgZ59FV9Y9jXjv93+GP\nVdWn+9q/WlU/l2SvJHfsH7uof/yCqnryyOvX7Oh8jpnn0aOHB1XVR6rqkqr605FxLq6q1yf5cpK/\nSfITVXVDVX2nqj43Uuu3q+qkqrogyaVVdW0/L2+sqvtU1TljyrhHP82vV9Xakdqm/wv/yyT36pfL\nX8+y7Gb6aJK79+P8XFUd0W/j51fVB6rqR/ppnFVVf1FVn0ryB2OWz23W9UhtJ1XVZ5M8NcnqbNkW\n7zi97VbVipFt94Kq+sPqvtEZHX9dVZ3TT+OEmTUk2XPcNllbf5OyuqrO6odf1o//iX4dXd6/b75V\n3fv0K30tb66q24+09fKq+nL/3E/0j6+sqo/1j/9tVX2zZj8ycv+q+td+Pf52//p9+jqm2z22f3zv\nqvpQv81+dXobr6ojq+pT/fI4s6p+bOTx86rq80meM8v0p9fnq6vq3/p2jxozzuOr6ov9cvh4Vf1o\nVe3R172yH2ePqrp05rzW1t/I/WW/bZ9fVa+sql9O8vQkb05yfZL3zrLtHFPdfuazSX555PHNR+Cq\n6p79cju/vz14tnkeyrh1Vt1+b1Lb047Wu3nfVlU/2W/75/bL9LDM2K/0472wun3p+bVl377Qz9Y1\nVfXcfvhVVfWv/fAjq+odI8vlNvu0vol9qnt/f62qTquqcRfQ25Hl8U81Yz9TXQY4uaq+mOQl6YLr\nJ6vqk6P1jq77JOcmuU9VTV9n5OK+nc2fVdUdwf90dfva6f3/HjOWQarqN/tlfV5VvX2WundoH9yP\ne0y/zZ1XVZ8YM41tyTxvqKofVPdZ9+9VdVqSH0/ynOr2IX9eVTf275H398vuP/ptfWbmeVaSJyV5\neZIHJ3lSdfvyY6vbZ/+gX7Z/Ut1+54FJPlZV56Y/615V3auqvjxS42E15nN2rnWygO3kmVX1qpFx\nfruq/t+M123z+21WrbWd7i/JkUkuSLJ3kn2SXJjkp5NsSnJEP857k/xGP/zWJMf1w2clWd0PtySP\n74fXJnlpP/zOJA/phw9OcvEsdVye5CX98G8m+WA//LIkL+iH7zYy/v9J8vv98FuSPLEfPiHJ/52t\n1iQ3JPlYkl/pb++a5EeT3JjksUkel+Tfktypf91d55n25vpmzM8h/TJ5cH//zSPzMbrcpttf0T9+\nvySV5GtJVo4sw8ePLKf9++GN/e0fjSy7FUn2TbKx/5uezxX9fH4ryY8t1nzOqOOQJF/th49P8p9J\n7pbkjkm+2i//Q5LcmuSBI6+5uB/+1XSnujyir3VTkj9L8vB+/Xw+yQP6+fnH6dpG6jg+yWXpLg51\nhyTfTHLQ6HIbrXG2ZTfLuhx9zflJHtYPn5zk1SPr9fVzvNdus65HalszMt5Z6bePGdvukUk+NvL4\nXebYnqaX+d1mzPts2+Tl2bJdrU5y1sh6/2ySX0vy/nTvn8f1y/iGJL/Xj/cPSZ430tb0dvN7Sd7U\nD78uyYv74WP6WvYfs5xeluS8fh72T3JFug/xPZPs14+zf5JL071XfiXJ3428/s5Jbpdu+55+Dz05\n3WlWZ66/vx5dtzPqOGu63SQPzdbb9uv64R9JNp+x6lnZsu/505Hl8Zgk7x+zP3trumsq3DXJJSPt\n3GVkXU0vr3H7iTv0y+awfjm8N1v2m6M1/kuS3+qH/1eSf5ptGx3qb5Z1dkWS+yz29rSDdY7bt702\nydP64b367XTz8yPr/NR+veyR5IP9NnRIZvlsnTHdByZ5Xz/8mSRfSrdN/2mS3xl9z46Z9sOTXJfu\nQnp7pNtvPmSRl8u4/UxL8msj41w+uj5G6t287vvaL+qHv91v2zM/qx6ebv//4/1zH8uWz/XpNn8y\n3Xto/9H65qh7e/fBK9Ntp4fOaO/4bHm/bUvm+et+e/jjfhs5J8lXkrwgybFJPtSv8+el+zw+Jd1+\neGbmeWO/vN6V7lTRn0uyoa/54ek/N9Lto6br/FqS9/TDL8uW/dIns2X7/IvM+Jwd2cbmXCdzbCd7\nJ/mPJLfrn/u3JPfdkffbXH876xHvhyT5QGvt+tbaxnSB5ueSfKO1dm4/zjnpZnQuP0y34cwc/1FJ\nXtf/V7UuyX5Vte8sbbxr5PYMe5sdAAAO6ElEQVToMc//VFV9projoE9L92ZLkjcleUY//Ix0G+Vs\nbk23sbw03T8c17bW/ivJtX17j0ryltbaDUnSWpu+uuds057LFa21z/XD70i3rGf6tf4/zK/0bR7e\nui3s7Ul+o7r+a0cn+fAc0zk7yTOq6mXpNuDvjzz3kCTvaq3d0s/np5L8zCLP52w+1lr7bmvtB+m2\nq+n5/2Zr7Qsj4+3XL4PXp/tw+Ym+1hvTvYmT7oPndekuAvXuJI9It4Ob6ROttetaazcmuSjJPeep\nca5ldxtVded0gfdT/UNvS/eBOu09c7z8Nut6ga+bdlmSH6+q11bVMUm+N2ac5/ZHkr6Q7gjSYTOe\nX8g2OdOH0x2ZekC6Hd/GdO/vq/v7yW2Xw/Q3NKP7goekW3dprX0kyTVzTPOfW2s/aK19J90HwVHp\nQsxfVNX5ST6e5IB0H9AXJHlUdd+Y/Vxr7bok/yPJT2XLEZ2XJjlwzPobe2RsxLv6ej+dbjud2Z/0\nwCRn9u+XF2bL++XN6Q4gJF3YnWuf9L102/qbqjvSfUP/+MYkX++Hx207P5FuP/31fp/xjlnaPzpb\n3itvz8LW+aRttc7SbSPfaK39e//8Ym9Pi+nzSf64qv53knv2+7eZHtP/fSXdN3s/kS3vxYV8tp6T\n5Mj+s/Kmfpqr0302f2YBNX6ptXZla+3WdO/dcdPYEeP2M7ekC4Xz2bzu030W3do/fvsk/zjmsyrp\n5uey1tot6d6TM7fhRyQ5vd9fjH6ezbSj++AHJvl0a+0bc0xnWzLPuiTfSBfAj0534POy/rkLktwn\nyS8keUW6z+PHptuXzMw8F6X75+CmdEF+dF5uTvLgqvpOuhB/m94EM7wp3WfiinQHLMZ9zibzr5Nk\nzHbSWrs+yb8m+aXqvr26XWvtgjnqWcj7bVY7a/Ce7Suom0aGb8n8FwC6ud/5zxx/jyRHt9aO6P8O\naK19v7qvfs+tqjeNtNFmGZ721iQnttbum+7rlDskSR8kDqmqhyVZ0Vqb78dS90/33+Aj0m1ko2pb\npr35RVUH9fNzblU9e5Z5aDNec2i6/2wf2Vq7X7r/bqfbfUuS30j3tdf7WmubZpuZPhQ8tJ+nt1fV\nb448Pdv6Xcz5nLW0We5fP/LYgemOWDwyyWnpjnSOTvPGkde+P93R1vunOzry0JFapn+suk3b7bhl\nV1VPGtPuQl2fdP0ER9o4eZ51vfl189R6Tbp5PytdF4mttt2qeni6nf7RrbX7p/twucPWrcy6TjZl\nyz5q5mtu6gPRkf14r0h3NCaZfflOr4fRdTB2W6yq54wsq+l+lePqfFq6I05HttaOSPJfSe4wUtsF\nSV5RVSf107pwZL9z39baYzL7dp+qektfwxkzpjuzjlGvTXcE6b5Jfidb9klXJPmvqnpEkp/NHP84\n9+/to9Jt309M8pH+qU19XXNtO2PnZR7b85pFNXOdZcv2NJsFb0+T1lp7Z5InJPlBun+6HjFmtEry\nipHt796ttb/vn7vNPmrmfrW1dnO6gw7PSHdE8DNJfj7JvZJcvIAyt/Xze8Hm2M/c2IewOc1Y92vS\nvaeTudfnfO/D27yvJ7EPHjedMbY189w0MnxruvWVfvie6Y5on5Xu25EfTbcv+UKSx1TV19MdVf/W\nHHX9eboj8r+T7mj9/eepf/pz9peSnNNa+25V/ezIsnzCSL2jZi7/h2f2z6M39TXNd6B0oe+3We2s\nwfvTSZ5YXX/pvdP1EVrIf9QL9dEkJ07fqaojkqS19th+o3zWyLhPHrn9/Ji29k3yn9X1bXrajOf+\nId1/XXOuxN4e6Y5I3ZDkAdX1xdwv3Y7uo0n+V23p+3rXBUw7rbUrRt5ob+wfPriqpo/cPzXdV/aj\n9kv3Zr+uuj7xjxtp76okV6U7UvfWuWamqu6Z5Nuttb9Ld4XSB/RP3ZzuK6cn9zuhlelC5pcWeT5n\n8+iqumt1fRif2Ncy0x7pdmbXpQvdP9OVUyvTvUm/0o93VLqvHc9MtyN6b2vtAyO1rJ+nlmnf7+cx\nyfhlN1e7/dHUa2pLX/Cnpzsykxnj3TLSxkmZY13PV+NIrfsn2aO19v4kf5It63l6/Dsnuaa1dkN/\nJOGBY9qebZu8PN2HYdJ9FTxz2vdI937ZlOSVSR6UrkvE3fpRxi6HGaa7rKSqHpOum0Zaa6eMLKur\n+nGPrao7VNXd0n2teXY/f99urd1cVT+f/tuM6dpaa+/oa3tAuq+dV07Pa1Xdrqp+snU/xLquqqaP\nzmzexltrz+hr+IWRmqf7mT4kyXX9+h9153T/tCXdtzGj3pTuKPR75wokVbVPkju31s5I95XyEf1T\nt6Zbr7NtO19LcmhV3au//9RZJvFv2XKl4qfltvuhwY1ZZw9Kd/Bk+mjcdm9Pk1ZVP57kstbaa9Id\nsbxfbvuePTPd/nWf/jUHVNXdZ2tzlv3qp9MFxU+n+0x+dpJzRw5wTRu7v5ighexnktn3Y6Pr/jUj\n41yT5Lgxn1VJclRVHVpdP+In57bb8CfSHc2+Wz+Nu05iH5wulzysD/Gjn5ujtiXzPL6/nS3z7JGu\ny+Zb0v1u6PJ+vm5Jlw32TtcF5Yvp9pO3T9f141dH2rhrkqn+c+Pqkfn6QbZ8Y7lZ674tPjPJG/rp\nprX2xZFlua4fdb51Mut20lr7Yroj4L+eLT0dxlrg+21WE7tk/I5orX25qt6aLRv4m7K4X9k9N8kp\n1X09vGe6nchsR0pvX90PM/bI+A+RP0m3gX0z3X/Lowv+tHQb4JwrsW/7rP52Okz8a7qN7BXpNsbT\nk6yvqh8mOSNd/6u5pj2bi5P8VlX9bbqvjN8w+mRr7byq+kq2fL00M5ielq6P6ny/pn54khdW1c3p\nvp7+zXR9uU5N1we5pQu1LV0/tqkkH+l3CIsxn7P5bLqvtu+d5J2ttfVVdcjoCK21T1f3w5ob0gWY\nb6br1/38dP29v53k7ul2Sn+ZLoDfkq5P2jbr/3v/XHU/3Phwun5nM5fdfH4ryRv7f1ouy5av/Oaa\n7nzretRb+/Z/kK27XB2Q5C215UcsLx4dP923A1P9e+2SdEdFZpptm3x5kr+v7hSUXxzzuvum+zr0\njul+OPW7SX4/yW9W1S+lC8bz/SP28iTvqu5HU59K94EyW9eeL6U7InVwkj9rrV1V3Q+P/qWq1qf7\n+vxro7VV1a3p/tn83dbaD6v7AdFrqutesmeSV6db/s9I8uaquiHdB8xcrqnutJ37pesyMtPLkryv\nqjakW96Hjjy3Lt0H13wHA/ZN8s9VdYd0/4ROn7LyunTdV25K1599q22ntXZjdT9Y+lB1XyN/Nl33\nmpmem25+X5jug3fe7XUAt1ln6T6o31fdGYEWe3taTE9O1w3w5iRTSU5urf336H6ltfbCqvqfST5f\n3e8aN6b7BnPeI8IjPpPuvfb51tr1VXVjxhwUG7NP+9AOzd38PpLk2fPsZ5Lu8+fDVfWfrbWfH3l8\n5rr/dF/719P9vuy6dN0v1rTWpvrQNr3/v2+6DLHV2ThaaxdWd2q8T1XVLekO2Bw/Y5wd3ge31q7u\n33P/2O+Hv53k0TNeuy2ZZ690XV//IF3meemM57+dbn/8rXSZ5dKR5zZnntbatdV1l3x1umD68b7d\npDug9LF+e70hW7qyfDbddnxutnQTHm37l9P9EzGbOddJ5t9O3puuL/l8eXNB77fZXuyS8XOoqsvT\n/ZjhO9v5+uOSHNtae/qiFrad+oD5wdbauA/ChbbxuiRfGfmKcrdU3VdWL2it/VJ15xq9c2vtT5a4\nLLZRdWepuKW1tqk/Ev2G1nUZ2SlVd2aXF2zDtykzX786yataa+POlMMO2tW2J7bP6P5/qWtZTNuS\necbtSyaZeeb7nF2MdVLdueZf1Vq7zZlhFtNOecR7Oaiq16b72ugX5ht3V1HdKXyuT3fWDZJUd4rF\ne6Xrm8+u5+B0p8XbI92PsX97ieuZmOouXvO7GdNdi0Wz22xP7L7G7UsmmXkm/Tlb3Q/Uv5TkvEmH\n7sQRbwAAGMTO+uNKAABYVgRvAAAYgOANwPQl3e8x/5gAbC/BG2AX1p/qbjEcn+50pgBMiOANMKCq\n2ruqPlRV51XVV6vqyVX1yKr6SlVdUFVv7k9Ll6q6vLqLFKWqVvenE0xVvayqTq2qjyb5h+ou8PHK\n/vXnV9Xv9+MdWVWfqqpzqrtK3Y/NUtNx6S7/fVp1V4L7xf5MAtPPP7qq/rEf3lhV/7eqvlxVn6ju\nwiKpqntV1Uf6aX2mP9cxACMEb4BhHZPkqtba/ftz6n8k3cUxnty6y7zvme5UXfM5Mt05c3893ZVT\nD03y0/2lp0+r7kqvr01yXGvtyHRXxv3zcQ211k5Psj7J0/rzTp+R5H9Oh+psfRnlvZN8ubX2gHQX\nifnT/vFTk/x+P60XJHn9gpYGwG7EebwBhnVBkldW1V+luzrb95J8o7X27/3zb0vynHRXfJvLutba\nD/rhRyV5Y2ttU5L0V1H7qXRXjfxYf6XCFemupDiv1lqrqrenuzrbW9JdKW/6Cqq3JnlPP/yOdFfM\n2yfdJdbf108r6S4VDcAIwRtgQK21f6+qI9NdaOIVmfsSyJuy5ZvJO8x47vqR4Uoy86IMleTC1trR\n2T5vSfIvSW5M8r7pUD9G62u81lUaAeamqwnAgPozh9zQWntHklemO1J8SFXdux/l6em6cCTJ5em6\nlCTJr8zR7EeTPHv6h5ZVddcklyRZ2V+6PFV1u6r6yTna+H6SfafvtNauSnJVkpem6wozbY8kx/XD\nv57ks6217yX5RlX9aj+tqqr7zzEtgN2S4A0wrPsm+VJVnZvkJemC7TPSddO4IF1Xjjf24748yd9U\n1WeS3DJHm29K8q0k51fVeUl+vbX2w3QB+a/6x85NF/Jn89Ykb+x/XHnH/rHTklzRWrtoZLzrk/xk\nVZ2T7hLOJ/ePPy3JM/tpXZjk2HmWA8BuxyXjARirql6X5Cuttb8feWxja22fJSwLYJcleANwG/0R\n7euTPLq1dtPI44I3wHYSvAF2I1V1SpIHz3j4b1prbxk3PgCLR/AGAIAB+HElAAAMQPAGAIABCN4A\nADAAwRsAAAYgeAMAwAAEbwAAGMD/Byz+1gSGTpTPAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,8))\n",
    "sns.barplot(data=train[['source_type',\n",
    "                       'target']],\n",
    "           x=\"source_type\",y=\"target\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 总和上述过程，可以看到数据的分布还是非常的均匀的，没有什么特殊的地方"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-------------------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将训练集和测试集的数据合并后同时处理再分开"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>/uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=</td>\n",
       "      <td>8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=</td>\n",
       "      <td>discover</td>\n",
       "      <td>NaN</td>\n",
       "      <td>song-based-playlist</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0   0  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "1   1  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "2   2  /uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=   \n",
       "3   3  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "4   4  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=        my library   \n",
       "1  y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=        my library   \n",
       "2  8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=          discover   \n",
       "3  ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=             radio   \n",
       "4  MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=             radio   \n",
       "\n",
       "    source_screen_name          source_type  \n",
       "0  Local playlist more        local-library  \n",
       "1  Local playlist more        local-library  \n",
       "2                  NaN  song-based-playlist  \n",
       "3                Radio                radio  \n",
       "4                Radio                radio  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = 'data/'\n",
    "test = pd.read_csv(path+'test.csv')\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_new=train\n",
    "train_new['type']='train'\n",
    "train_new['id']=-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_new=test\n",
    "test_new['type']='test'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\15067\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
      "of pandas will change to not sort by default.\n",
      "\n",
      "To accept the future behavior, pass 'sort=False'.\n",
      "\n",
      "To retain the current behavior and silence the warning, pass 'sort=True'.\n",
      "\n",
      "  sort=sort)\n"
     ]
    }
   ],
   "source": [
    "data_all = train_new.append(test_new)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_type</th>\n",
       "      <th>target</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1</td>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>Explore</td>\n",
       "      <td>explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>my library</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>my library</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>my library</td>\n",
       "      <td>local-playlist</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1</td>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>Explore</td>\n",
       "      <td>explore</td>\n",
       "      <td>online-playlist</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0  -1  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  -1  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id   source_screen_name  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=              Explore   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=  Local playlist more   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=  Local playlist more   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=  Local playlist more   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=              Explore   \n",
       "\n",
       "  source_system_tab      source_type  target   type  \n",
       "0           explore  online-playlist     1.0  train  \n",
       "1        my library   local-playlist     1.0  train  \n",
       "2        my library   local-playlist     1.0  train  \n",
       "3        my library   local-playlist     1.0  train  \n",
       "4           explore  online-playlist     1.0  train  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_all.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 9934208 entries, 0 to 2556789\n",
      "Data columns (total 8 columns):\n",
      "id                    int64\n",
      "msno                  object\n",
      "song_id               object\n",
      "source_screen_name    object\n",
      "source_system_tab     object\n",
      "source_type           object\n",
      "target                float64\n",
      "type                  object\n",
      "dtypes: float64(1), int64(1), object(6)\n",
      "memory usage: 682.1+ MB\n"
     ]
    }
   ],
   "source": [
    "data_all.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "id                          0\n",
       "msno                        0\n",
       "song_id                     0\n",
       "source_screen_name     577687\n",
       "source_system_tab       33291\n",
       "source_type             28836\n",
       "target                2556790\n",
       "type                        0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_all.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一共快1000w条数据，缺失最多的是source_screen_name，缺失5%左右，缺失的不多，target缺失的是测试数据。\n",
    "最关键的msno，song_id,target均没有缺失，说明训练数据还是比较好的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "source_system_tab category value_counts:\n",
      "my library      4704222\n",
      "discover        3050320\n",
      "search           900901\n",
      "radio            689466\n",
      "listen with      310894\n",
      "explore          233972\n",
      "notification       8309\n",
      "settings           2833\n",
      "Name: source_system_tab, dtype: int64\n",
      "\n",
      "\n",
      "source_screen_name category value_counts:\n",
      "Local playlist more     4073317\n",
      "Online playlist more    1824496\n",
      "Radio                    685668\n",
      "Album more               596285\n",
      "Search                   420469\n",
      "Artist more              363428\n",
      "Discover Feature         337647\n",
      "Discover Chart           292657\n",
      "Others profile more      292252\n",
      "Discover Genre           123819\n",
      "My library               101539\n",
      "Explore                  100214\n",
      "Unknown                   77790\n",
      "Discover New              21232\n",
      "Search Trends             18515\n",
      "Search Home               18187\n",
      "My library_Search          8565\n",
      "Self profile more           343\n",
      "Concert                      60\n",
      "Payment                      24\n",
      "People local                 13\n",
      "People global                 1\n",
      "Name: source_screen_name, dtype: int64\n",
      "\n",
      "\n",
      "source_type category value_counts:\n",
      "local-library             2843745\n",
      "online-playlist           2742456\n",
      "local-playlist            1374040\n",
      "radio                      698273\n",
      "album                      672534\n",
      "top-hits-for-artist        602974\n",
      "song                       373875\n",
      "song-based-playlist        297706\n",
      "listen-with                277341\n",
      "topic-article-playlist      16276\n",
      "artist                       3466\n",
      "my-daily-playlist            2686\n",
      "Name: source_type, dtype: int64\n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "data_category_feature_name = ['source_system_tab','source_screen_name','source_type']\n",
    "for col in data_category_feature_name:\n",
    "    print('%s category value_counts:'%col)\n",
    "    print(data_all[col].value_counts())\n",
    "    print('\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这3个特征在之前数据探索时已经查看了与结果的关系，这里的是所有数据，相比之前的训练数据，source_screen_name多了2个值。\n",
    "这边要思考在千万级别的数据中，出现次数小于500的值，例如Concert，Payment,People local,People global,这些值需不需要处理？\n",
    "\n",
    "1. 可以处理，降低特征维度，减少工作量\n",
    "2. 不可以处理，这些可以认为是“小众”数据？拥有一定的潜力？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "#用出现次数最多的类型填补source_system_tab, source_screen_name, source_type类型的缺失值\n",
    "data_all['source_system_tab'] = data_all['source_system_tab'].fillna('my library')\n",
    "\n",
    "data_all['source_screen_name'] = data_all['source_screen_name'].fillna('Local playlist more')\n",
    "\n",
    "data_all['source_type'] = data_all['source_type'].fillna('local-library')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "采用众数填充的方式（缺失值填充方法：https://blog.csdn.net/jingyi130705008/article/details/82670011 ）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_system_tab_discover</th>\n",
       "      <th>source_system_tab_explore</th>\n",
       "      <th>source_system_tab_listen with</th>\n",
       "      <th>source_system_tab_my library</th>\n",
       "      <th>source_system_tab_notification</th>\n",
       "      <th>source_system_tab_null</th>\n",
       "      <th>source_system_tab_radio</th>\n",
       "      <th>source_system_tab_search</th>\n",
       "      <th>source_system_tab_settings</th>\n",
       "      <th>source_screen_name_Album more</th>\n",
       "      <th>...</th>\n",
       "      <th>source_type_listen-with</th>\n",
       "      <th>source_type_local-library</th>\n",
       "      <th>source_type_local-playlist</th>\n",
       "      <th>source_type_my-daily-playlist</th>\n",
       "      <th>source_type_online-playlist</th>\n",
       "      <th>source_type_radio</th>\n",
       "      <th>source_type_song</th>\n",
       "      <th>source_type_song-based-playlist</th>\n",
       "      <th>source_type_top-hits-for-artist</th>\n",
       "      <th>source_type_topic-article-playlist</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 43 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   source_system_tab_discover  source_system_tab_explore  \\\n",
       "0                           0                          1   \n",
       "1                           0                          0   \n",
       "2                           0                          0   \n",
       "3                           0                          0   \n",
       "4                           0                          1   \n",
       "\n",
       "   source_system_tab_listen with  source_system_tab_my library  \\\n",
       "0                              0                             0   \n",
       "1                              0                             1   \n",
       "2                              0                             1   \n",
       "3                              0                             1   \n",
       "4                              0                             0   \n",
       "\n",
       "   source_system_tab_notification  source_system_tab_null  \\\n",
       "0                               0                       0   \n",
       "1                               0                       0   \n",
       "2                               0                       0   \n",
       "3                               0                       0   \n",
       "4                               0                       0   \n",
       "\n",
       "   source_system_tab_radio  source_system_tab_search  \\\n",
       "0                        0                         0   \n",
       "1                        0                         0   \n",
       "2                        0                         0   \n",
       "3                        0                         0   \n",
       "4                        0                         0   \n",
       "\n",
       "   source_system_tab_settings  source_screen_name_Album more  \\\n",
       "0                           0                              0   \n",
       "1                           0                              0   \n",
       "2                           0                              0   \n",
       "3                           0                              0   \n",
       "4                           0                              0   \n",
       "\n",
       "                  ...                  source_type_listen-with  \\\n",
       "0                 ...                                        0   \n",
       "1                 ...                                        0   \n",
       "2                 ...                                        0   \n",
       "3                 ...                                        0   \n",
       "4                 ...                                        0   \n",
       "\n",
       "   source_type_local-library  source_type_local-playlist  \\\n",
       "0                          0                           0   \n",
       "1                          0                           1   \n",
       "2                          0                           1   \n",
       "3                          0                           1   \n",
       "4                          0                           0   \n",
       "\n",
       "   source_type_my-daily-playlist  source_type_online-playlist  \\\n",
       "0                              0                            1   \n",
       "1                              0                            0   \n",
       "2                              0                            0   \n",
       "3                              0                            0   \n",
       "4                              0                            1   \n",
       "\n",
       "   source_type_radio  source_type_song  source_type_song-based-playlist  \\\n",
       "0                  0                 0                                0   \n",
       "1                  0                 0                                0   \n",
       "2                  0                 0                                0   \n",
       "3                  0                 0                                0   \n",
       "4                  0                 0                                0   \n",
       "\n",
       "   source_type_top-hits-for-artist  source_type_topic-article-playlist  \n",
       "0                                0                                   0  \n",
       "1                                0                                   0  \n",
       "2                                0                                   0  \n",
       "3                                0                                   0  \n",
       "4                                0                                   0  \n",
       "\n",
       "[5 rows x 43 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "category_data = data_all[data_category_feature_name]\n",
    "category_data = pd.get_dummies(category_data)\n",
    "category_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "采用Onehot编码，对source_system_tab,source_screen_name,source_type进行特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab_discover</th>\n",
       "      <th>source_system_tab_explore</th>\n",
       "      <th>source_system_tab_listen with</th>\n",
       "      <th>source_system_tab_my library</th>\n",
       "      <th>source_system_tab_notification</th>\n",
       "      <th>source_system_tab_null</th>\n",
       "      <th>source_system_tab_radio</th>\n",
       "      <th>...</th>\n",
       "      <th>source_type_local-playlist</th>\n",
       "      <th>source_type_my-daily-playlist</th>\n",
       "      <th>source_type_online-playlist</th>\n",
       "      <th>source_type_radio</th>\n",
       "      <th>source_type_song</th>\n",
       "      <th>source_type_song-based-playlist</th>\n",
       "      <th>source_type_top-hits-for-artist</th>\n",
       "      <th>source_type_topic-article-playlist</th>\n",
       "      <th>target</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1</td>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1</td>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 48 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0  -1  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  -1  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id  source_system_tab_discover  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=                           0   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=                           0   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=                           0   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=                           0   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=                           0   \n",
       "\n",
       "   source_system_tab_explore  source_system_tab_listen with  \\\n",
       "0                          1                              0   \n",
       "1                          0                              0   \n",
       "2                          0                              0   \n",
       "3                          0                              0   \n",
       "4                          1                              0   \n",
       "\n",
       "   source_system_tab_my library  source_system_tab_notification  \\\n",
       "0                             0                               0   \n",
       "1                             1                               0   \n",
       "2                             1                               0   \n",
       "3                             1                               0   \n",
       "4                             0                               0   \n",
       "\n",
       "   source_system_tab_null  source_system_tab_radio  ...    \\\n",
       "0                       0                        0  ...     \n",
       "1                       0                        0  ...     \n",
       "2                       0                        0  ...     \n",
       "3                       0                        0  ...     \n",
       "4                       0                        0  ...     \n",
       "\n",
       "   source_type_local-playlist  source_type_my-daily-playlist  \\\n",
       "0                           0                              0   \n",
       "1                           1                              0   \n",
       "2                           1                              0   \n",
       "3                           1                              0   \n",
       "4                           0                              0   \n",
       "\n",
       "   source_type_online-playlist  source_type_radio  source_type_song  \\\n",
       "0                            1                  0                 0   \n",
       "1                            0                  0                 0   \n",
       "2                            0                  0                 0   \n",
       "3                            0                  0                 0   \n",
       "4                            1                  0                 0   \n",
       "\n",
       "   source_type_song-based-playlist  source_type_top-hits-for-artist  \\\n",
       "0                                0                                0   \n",
       "1                                0                                0   \n",
       "2                                0                                0   \n",
       "3                                0                                0   \n",
       "4                                0                                0   \n",
       "\n",
       "   source_type_topic-article-playlist  target   type  \n",
       "0                                   0     1.0  train  \n",
       "1                                   0     1.0  train  \n",
       "2                                   0     1.0  train  \n",
       "3                                   0     1.0  train  \n",
       "4                                   0     1.0  train  \n",
       "\n",
       "[5 rows x 48 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_processed = pd.concat([data_all['id'],data_all['msno'], data_all['song_id'], category_data, data_all['target'],data_all['type']], axis=1)\n",
    "data_processed.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9934208, 48)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_processed.to_csv(path+'data_processed.csv', index=False)\n",
    "data_processed.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 将处理完的数据保存\n",
    "id: 测试数据有，训练数据都置为-1\n",
    "\n",
    "msno:未做任何处理\n",
    "\n",
    "song_id: 未做任何处理\n",
    "\n",
    "source_system_tab: 众数填充缺失值后Onehot编码\n",
    "\n",
    "source_screen_name:  众数填充缺失值后Onehot编码\n",
    "\n",
    "source_type:  众数填充缺失值后Onehot编码\n",
    "\n",
    "target: 训练数据有，测试数据没有，未做任何处理\n",
    "\n",
    "\n",
    "type:训练数据置为train，测试数据为test，区分数据类型\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 以上是用onehot处理的结果，以下是准备用lightGBM训练模型，所以不用onehot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 唯一的区别的是数据清洗后用label编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import LabelEncoder\n",
    "le = LabelEncoder()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_category_feature_name = ['source_system_tab','source_screen_name','source_type']\n",
    "category_data = data_all[data_category_feature_name]\n",
    "basic_data_cols=['id','msno','song_id','target','type']\n",
    "data_processed_basic =data_all[basic_data_cols]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "le.fit(np.unique(category_data))\n",
    "category_label_data=category_data.apply(le.transform)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_label_processed = pd.concat([data_all['id'],data_all['msno'], data_all['song_id'], category_label_data, data_all['target'],data_all['type']], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "      <th>target</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1</td>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=</td>\n",
       "      <td>25</td>\n",
       "      <td>7</td>\n",
       "      <td>33</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=</td>\n",
       "      <td>30</td>\n",
       "      <td>8</td>\n",
       "      <td>29</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=</td>\n",
       "      <td>30</td>\n",
       "      <td>8</td>\n",
       "      <td>29</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1</td>\n",
       "      <td>Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=</td>\n",
       "      <td>2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=</td>\n",
       "      <td>30</td>\n",
       "      <td>8</td>\n",
       "      <td>29</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1</td>\n",
       "      <td>FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=</td>\n",
       "      <td>3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=</td>\n",
       "      <td>25</td>\n",
       "      <td>7</td>\n",
       "      <td>33</td>\n",
       "      <td>1.0</td>\n",
       "      <td>train</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0  -1  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "1  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "2  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "3  -1  Xumu+NIjS6QYVxDS4/t3SawvJ7viT9hPKXmf0RtLNx8=   \n",
       "4  -1  FGtllVqz18RPiwJj/edr2gV78zirAiY/9SmYvia+kCg=   \n",
       "\n",
       "                                        song_id  source_system_tab  \\\n",
       "0  BBzumQNXUHKdEBOB7mAJuzok+IJA1c2Ryg/yzTF6tik=                 25   \n",
       "1  bhp/MpSNoqoxOIB+/l8WPqu6jldth4DIpCm3ayXnJqM=                 30   \n",
       "2  JNWfrrC7zNN7BdMpsISKa4Mw+xVJYNnxXh3/Epw7QgY=                 30   \n",
       "3  2A87tzfnJTSWqD7gIZHisolhe4DMdzkbd6LzO1KHjNs=                 30   \n",
       "4  3qm6XTZ6MOCU11x8FIVbAGH5l5uMkT3/ZalWG1oo2Gc=                 25   \n",
       "\n",
       "   source_screen_name  source_type  target   type  \n",
       "0                   7           33     1.0  train  \n",
       "1                   8           29     1.0  train  \n",
       "2                   8           29     1.0  train  \n",
       "3                   8           29     1.0  train  \n",
       "4                   7           33     1.0  train  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_label_processed.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(9934208, 8)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_label_processed.to_csv(path+'data_label_processed.csv', index=False)\n",
    "data_label_processed.shape"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
